fn main() {
    // 定义一个变量
    let x = 5;
    println!("第一个x：{}", x);

    // 可以用let重新声明变量x
    // 这个时候就会产生变量遮蔽
    let x = x + 1;
    println!("第二个x：{}", x);

    // 变量可以多次遮蔽
    let x = x * 2;
    println!("第三个x：{}", x);

    // 在代码块中可以再次遮蔽
    {
        // 遮蔽甚至可以修改变量的类型
        let x = "hello";
        println!("内部作用域的x：{}", x);
    }

    // 代码块结束以后，内部作用域的遮蔽也会结束
    println!("外部作用域的x：{}", x);
}
